package com.chujian.framework.sync.consumer;


import java.io.Serializable;
import java.util.Map;

/**
 * @author ：chujian
 * @since ：2020-11-26
 * 同步消息消费者（订阅者）定义
 */
public interface ISyncDataConsumer {

    /**
     * 是否订阅
     *
     * @param dataMark dataMark
     * @param dataId   dataId
     * @param dataId   changeType
     * @param headers  headers
     * @return 返回是否订阅，返回true：将执行consume
     */
    boolean isConsume(Serializable dataMark, Serializable dataId, Serializable changeType, Map<String, Object> headers);

    /**
     * 订阅消息
     *
     * @param payload 消息体
     * @param headers headers 消息头
     */
    default void consume(String payload, Map<String, Object> headers) {
    }

    /**
     * 订阅消息
     *
     * @param dataMark   dataMark
     * @param dataId     dataId
     * @param changeType changeType
     * @param headers    headers
     * @param payload    消息体
     */
    default void consume(Serializable dataMark, Serializable dataId, Serializable changeType, Map<String, Object> headers, String payload) {
    }

    default void beforeConsume(Serializable dataMark, Serializable dataId, Serializable changeType, Map<String, Object> headers, String payload) {

    }

    default void afterConsume(Serializable dataMark, Serializable dataId, Serializable changeType, Map<String, Object> headers, String payload, Throwable throwable) {

    }

}
